package 流程控制.循环结构;

public class break_continue_goto {
    public static void main(String[] args) {
        /**
         * continue语句作用
         * (1) continue语句continue语句的一般形式为：contonue;
         * (2) 其作用是结束本次循环，即跳过本次循环体中余下尚未执行的语句，接着再一次进行循环的条件判定。
         * (3) 注意：执行continue语句并没有使整个循环终止。在while和do-while循环中，continue语句使得流程直接跳到循环控制条件的测试部分 ，然后决定循环是否继续进行。
         * (4) 在for 循环中，遇到continue后，跳过循环体中余下的语句，而去对for语句中的“表达式3”求值，然后进行“表达式2”的条件测试，
         *     最后根据“表达式2”的值来决定for循环是否执行。在循环体内，不论continue是作为何种语句中的语句成分，都将按上述功能执行，这点与break有所不同
         */
        for (int i = 0; i <= 100; i++) {
            if (i % 10 == 0) {

            } else {
                continue;
            }
            System.out.println(i);
        }
        /**
         * do-while结构的循环体至少执行一次。在程序运行do-while循环结构时do{循环体}
         */
        int x = 0;
        do {
            x++;
            if (x % 10 != 0) {
                continue;
            }
            System.out.println("x:" + x);
        } while (x <= 100);

        int y = 0;
        while (y <= 100) {
            y++;
            if (y % 10 != 0) {
                continue;
            }
            System.out.println("y:" + y);
        }
        /**
         * break语句的作用
         * (1) 只能在循环体内和switch语句体内使用break语句。
         * (2) 当break出现在循环体中的switch语句体内时，其作用只是跳出该switch语句体。
         * (3) 当break出现在循环体中，但并不在switch语句体内时，则在执行break后，跳出本层循环体。
         * (4) 在循环结构中，应用break语句使流程跳出本层循环体，从而提前结束本层循环
         */
        for (int z = 1; z <= 100; z++) {
            if (z % 10 == 0) {
                break;
            }
            System.out.println("z:" + z);
        }
        int h = 0;
        do {
            h++;
            if (h % 5 == 0) {
                break;
            }
            System.out.println("h:" + h);
        } while (h <= 100);
        while (h <= 100) {
            h++;
            if (h % 5 == 0) {
                break;
            }
            System.out.println("h:" + h);
        }
        /**
         * 关于goto关键字。
         * goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的-个保留字，但并未在语言中得到正式使用; Java
         * 没有goto。然而，在break和continue这两个关键字的身上，我们仍然能看出一些goto的影子带标签的break和continue。
         *"标签”是指后面跟一个冒号的标识符，例如: label:
         * 对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯-理由是:我们希望在其中嵌套另-
         * 个循环，由于break和continue关键字通常只中断当前循环，但若随同标签使用，它们就会中断到存在标签的地方。
         */

        /**
         * 质数
         */
        is:
        for (int m = 1; m <= 100; m++) {
            for (int s = 2; s <= m / 2; s++) {
                if (m % s == 0) {
                    continue is;
                }
            }
            System.out.print(m + " ");
        }
        System.out.println();
        System.out.println("=============");
        for (int ss = 1; ss <= 100; ss++) {
            int zz = 0;
            if (ss % 2 == 0) {
                continue;
            }
            for (int d = 2; d <= ss / 2; d++) {
                if (ss % d == 0) {
                    break;
                }
                if (d == ss / 2) {
                    System.out.print(ss + " ");
                }
            }

        }
    }

}
